# -*- coding: utf-8 -*-
# Python list 常用操作

# list 定义
print('list 定义')
li = ['a', 'b', 'c', 'z', 'example']
print(li)

# list 负数索引
print('list 负数索引')
print(li[-1])
print(li[1:3])

# list 增加元素
print('list 增加元素')
li.append('new_element')
print(li)

li.insert(2, 'new_element')
print(li)

li.extend(['two', 'elements'])
print(li)

# list 搜索
print('list 搜索')
print(li.index('example'))
print('c' in li)

# list 删除元素
print('list 删除元素')
print(li)
li.remove('z')
print(li)

# list 运算符
print('list 运算符')
li = li + ['example', 'new']
print(li)

li = [1, 2] * 3
print(li)

# 使用 join 链接 list 成为字符串
print('使用 join 链接 list 成为字符串')
params = {'name': 'ken', 'age': 20}
print(["%s=%s" % (k, v) for k, v in params.items()])
print(";".join(["%s=%s" % (k, v) for k, v in params.items()]))

"""
join 只能用于元素是字符串的 list; 它不进行任何的类型强制转换。
连接一个存在一个或多个非字符串元素的 list 将引发一个异常。
"""

# list 分隔字符串
print('list 分隔字符串')
li = ['a', 'b', 'c', 'z', 'example']
s = ';'.join(li)
print(s)
print(s.split(';'))
print(s.split(';', 1))
"""
split 与 join 正好相反, 它将一个字符串分割成多元素 list。
注意, 分隔符 (";") 被完全去掉了, 它没有在返回的 list 中的任意元素中出现。
split 接受一个可选的第二个参数, 它是要分割的次数。
"""

# list 的映射解析
print('list 的映射解析')
li = [1, 9, 8, 4]
print([elem * 2 for elem in li])
print(li)

# dictionary 中的解析
print('dictionary 中的解析')
params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
print(params.keys())
print(params.values())
print(params.items())
print([k for k, v in params.items()])
print([v for k, v in params.items()])

# list 过滤
print('list 过滤')
li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
print('li:', li)
print([elem for elem in li if len(elem) > 1])
print([elem for elem in li if elem != 'b'])